//#include<iostream>
//using namespace std;
//int n, target, candidates[31]{ 0 }, combination[41];
//void quickSort(int array[], int low, int high) {
//	if (low < high) {
//		int base = array[low], left = low, right = high;
//		while (left < right) {
//			while (left < right && array[right] >= base)
//				right--;
//			if (left < right)
//				array[left] = array[right];
//			while (left < right && array[left] <= base)
//				left++;
//			if (left < right)
//				array[right] = array[left];
//		}
//		array[left] = base;
//		quickSort(array, low, left - 1);
//		quickSort(array, left + 1, high);
//	}
//}
//void printC(int array[], int n) {
//	for (int i = 1; i <= n; i++) {
//		cout << array[i];
//		if (i < n)
//			cout << ' ';
//		else
//			cout << endl;
//	}
//}
//int combinate(int current, int number, int start) {
//	int flag = -1;
//	for (int i = start; i <= n; i++)
//		if (current < target)
//			if (current + candidates[i] <= target) {
//				combination[number] = candidates[i];
//				if (current + candidates[i] == target) {
//					printC(combination, number);
//					flag = 1;
//					return flag;
//				}
//				flag = max(flag, combinate(current + candidates[i], number + 1, i));
//			}
//	return flag;
//}
//int main() {
//	cin >> n >> target;
//	for (int i = 1; i <= n; i++)
//		cin >> candidates[i];
//	quickSort(candidates, 1, n);
//	int flag = combinate(0, 1, 1);
//	if (flag == -1)
//		cout << flag << endl;
//	return 0;
//}